class LevelModel {
    constructor(lv,) {
        this.lv = lv
        // this.exp = exp
    }

    getNextLevelExp(lv) {
        if (!lv) return 0
        // const lv = this.lv
        const next = lv + 1
        return this.getCurrentLevelExp(next)
        // const func = (lv) => {
        //     if (lv < 0) {
        //         return 0
        //     } else if (lv === 0) {
        //         return 10
        //     } else {
        //         return func(lv - 1) + 35 + (lv - 1) * 10
        //     }
        // }
        // return func(lv)
    }

    getCurrentLevelExp(lv) {
        // function tco(f) {
        //     let value
        //     let active = false
        //     let accumulated = []
        //     return function accumulator() {
        //         accumulated.push(arguments);
        //         if (!active) {
        //             active = true;
        //             while (accumulated.length) {
        //                 value = f.apply(this, accumulated.shift());
        //             }
        //             active = false;
        //             return value;
        //         }
        //     }
        // }
        // const func = tco((lv) => {
        //     if (lv === 0) {
        //         return 0
        //     } else if (lv === 1) {
        //         return 0
        //     } else if (lv === 2) {
        //         return 10
        //     } else if (lv === 3) {
        //         return 55
        //     } else {
        //         return func(lv - 1) + 35 + (func(lv - 1) - func(lv - 2)) + (lv - 3) * 10
        //     }
        // })
        // return func(lv)
        const func = lv => {
            if (lv === 0) {
                return 0
            } else if (lv === 1) {
                return 0
            } else if (lv === 2) {
                return 10
            } else {
                let pre = 0
                let suf = 10
                for (let i = 3; i <= lv; i++) {
                    let temp = suf
                    // suf += pre
                    suf = suf + suf - pre

                    if (i < 10) {
                        suf += 35
                        suf += (i - 3) * 10
                    } else if (i < 20) {
                        suf += 200
                        suf += (i - 10) * 98
                        // suf += (i - 3) * 198
                    } else if (i < 30) {
                        suf += 2000
                        suf += (i - 20) * 499
                    } else if (i < 40) {
                        suf += 10000
                        suf += (i - 30) * 1997
                    } else if (i < 50) {
                        suf += 30000
                        suf += (i - 40) * 9996
                    } else if (i === 50) {
                        return 8477635
                    }

                    // suf += (lv - 3) * 10 + 35
                    //
                    pre = temp
                }

                return suf
                // return func(lv - 1) + 35 + (func(lv - 1) - func(lv - 2)) + (lv - 3) * 10
            }
        }
        return func(lv)
    }
}

export default LevelModel
